package com.changgou.file;

import com.changgou.common.constant.StatusCode;
import com.changgou.common.vo.Result;
import com.changgou.file.util.FastDFSClient;
import org.springframework.util.StringUtils;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;

@RestController
@RequestMapping("/file")
public class FileController {
    /**
     * 上传文件到fastDFS
     * @param multipartFile 文件
     * @return 操作结果
     */
    @PostMapping
    public Result upload(@RequestParam(name="file") MultipartFile multipartFile){
        try {
            //文件扩展名（后缀）
            /**
             * multipartFile.getOriginalFilename() 获取原文件名；如：abc.png
             * 后缀是png
             */
            String fileExtName = multipartFile.getOriginalFilename().substring(multipartFile.getOriginalFilename().lastIndexOf(".") + 1);
            //上传
            String url = FastDFSClient.upload(multipartFile.getBytes(), fileExtName);
            return new Result(true,StatusCode.OK,"文件上传成功！",url);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return new Result(false, StatusCode.ERROR,"文件上传失败!");
    }

    /**
     * 删除文件
     * @param path 文件路径
     * @return 操作结果
     */
    @DeleteMapping
    public Result delete(String path){
        try {
            /**
             * 1、将路径中的 http:// 替换为空字符串 192.168.12.168/group1/M00/00/00/wKgMqF3677qAcKjKAAL1OdM3-Qg178.jpg
             * 2、将上述的字符串使用 / 进行分割得到一个数组：如下：
             * 192.168.12.168
             * group1
             * M00
             * 00
             * 00
             * wKgMqF3677qAcKjKAAL1OdM3-Qg178.jpg
             * 组名为数组中第2个值；文件名可以从第3个值进行拼接一个字符串
             */
            if (!StringUtils.isEmpty(path)){
                path= path.replaceAll("http://", "");
                String[] split = path.split("/");
                //获取组名
                String groupName=split[1];
                //拼接文件名
                StringBuilder sb = new StringBuilder();
                for (int i = 2; i < split.length; i++) {
                    sb.append(split[i]).append("/");
                }
                //去掉最后一个/
                sb.deleteCharAt(sb.length()-1);
                //文件名
                String remoteFilename=sb.toString();

                FastDFSClient.delete(groupName,remoteFilename);
            }
            return new Result("文件删除成功！");
        } catch (Exception e) {
            e.printStackTrace();
        }
        return new Result(false,StatusCode.ERROR,"文件删除失败！");
    }
}
